init: Add a --collection-id argument to the built-in init command
authorPhilip Withnall <withnall@endlessm.com>
Wed, 7 Jun 2017 13:48:35 +0000 (14:48 +0100)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 26 Jun 2017 15:56:07 +0000 (15:56 +0000)
This allows new repositories to be configured with a collection ID which
can be used to uniquely identify refs which originated from this
repository.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #924
Approved by: cgwalters

man/ostree-init.xml
src/ostree/ot-builtin-init.c

index 95f0b162e09832fbb4e3a928092f98a45dff3389..fb35c0dabb54cc553d5c51d300b05d5dd78de717 100644 (file)
@@ -71,6 +71,32 @@ Boston, MA 02111-1307, USA.
                     Initialize repository in given mode (bare, bare-user, archive-z2).  Default is "bare".
                 </para></listitem>
             </varlistentry>
+
+            <varlistentry>
+                <term><option>--collection-id</option>=COLLECTION-ID</term>
+                <listitem><para>
+                    Set the collection ID of the repository. Remotes in clones
+                    of this repository must configure the same value in order to
+                    pull refs which originated in this repository over peer to
+                    peer.</para>
+
+                    <para>This collection ID must be persistent and globally
+                    unique. It is formatted as a reverse DNS name (like a D-Bus
+                    interface). It must be set to a reverse DNS domain under your
+                    control.</para>
+
+                    <para>This option may be omitted (the default) to leave
+                    peer to peer distribution unsupported for the repository. A
+                    collection ID may be added to an existing repository in
+                    future to enable peer to peer distribution from that point
+                    onwards.</para>
+
+                    <para>If the collection ID is changed for the repository
+                    in future, peer to peer distribution of refs from the
+                    repository will break for all peers who do not update their
+                    remote configuration to the new collection ID.
+                </para></listitem>
+            </varlistentry>
         </variablelist>
     </refsect1>
 
index 8180a8aea566981bfe3844ad2d241a8fccfe415c..0dabd458ba40a47511cc7f18126c7e01835c297b 100644 (file)
 #include "ostree.h"
 
 static char *opt_mode = "bare";
+#ifdef OSTREE_ENABLE_EXPERIMENTAL_API
+static char *opt_collection_id = NULL;
+#endif  /* OSTREE_ENABLE_EXPERIMENTAL_API */
 
 static GOptionEntry options[] = {
   { "mode", 0, 0, G_OPTION_ARG_STRING, &opt_mode, "Initialize repository in given mode (bare, archive-z2)", NULL },
+#ifdef OSTREE_ENABLE_EXPERIMENTAL_API
+  { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id,
+    "Globally unique ID for this repository as an collection of refs for redistribution to other repositories", "COLLECTION-ID" },
+#endif  /* OSTREE_ENABLE_EXPERIMENTAL_API */
   { NULL }
 };
 
@@ -48,6 +55,10 @@ ostree_builtin_init (int argc, char **argv, GCancellable *cancellable, GError **
 
   if (!ostree_repo_mode_from_string (opt_mode, &mode, error))
     goto out;
+#ifdef OSTREE_ENABLE_EXPERIMENTAL_API
+  if (!ostree_repo_set_collection_id (repo, opt_collection_id, error))
+    goto out;
+#endif  /* OSTREE_ENABLE_EXPERIMENTAL_API */
 
   if (!ostree_repo_create (repo, mode, NULL, error))
     goto out;